package com.flyme.module.order.provider.service;


import com.flyme.common.core.model.ResultBody;
import com.flyme.common.core.model.query.PagerInfo;
import com.flyme.common.core.model.query.PqGrid;
import com.flyme.core.base.supper.entity.EntityMap;
import com.flyme.core.base.supper.service.IBaseService;
import com.flyme.module.order.client.entity.Order;
import com.flyme.module.order.client.entity.OrderInfo;
import com.flyme.module.order.client.enums.OrderStatusEnum;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author: flyme
 * @date: 2018/3/7 15:28
 * @desc: 订单接口
 */
public interface OrderService extends IBaseService<Order> {

    /**
     * 更新
     *
     * @param order
     * @return
     */
    Boolean update(Order order);

    /**
     * 删除
     *
     * @param ids
     * @return
     */
    ResultBody delByIds(String[] ids);

    /**
     * 更新第三方流水号
     */
    Boolean editOrder(String outTradeNo, String orderId, String payType);

    /**
     * 创建订单
     */
    ResultBody createOrder(OrderInfo orderInfo);

    /**
     * 根据订单号查询订单
     */
    Order findByNo(String outTradeNo);

    /**
     * 查询用户未支付订单
     */
    Order checkUserOrder(Long targetId, Long userId);

    void orderJob();

    /**
     * 网站查询用户订单2
     */
    PqGrid selectByAccount2Web(Long accountId, String orderStatus, PagerInfo pagerInfo);

    /**
     * 根据用户查询对应项目的未过期订单
     */
    Order findByUser(Long targetId, Long userId);

    /**
     * 7日销售量
     */
    List<EntityMap> getSevenSale();

    /**
     * 每月销售量
     */
    List<EntityMap> getYearSale(String createTime);

    /**
     * 统计订单总金额
     */
    List<String> getCharge(String beginTime, String endTime);

    /**
     * 订单退款
     */
    Boolean returnAmount(Order order);

    /**
     * 更新订单状态
     */
    Boolean updateOrderStatus(Long orderId, OrderStatusEnum orderStatusEnum);

    Boolean returnAmount(Long orderId, BigDecimal returnAmount,String returnDate, String reason);

    Integer countByUser(Long userId);

    Boolean updateWxOrder(String orderTradeNo);

    ResultBody selectOrders(PagerInfo pagerInfo, Long userId);

    /**
     * 根据考试安排，统计考试金额及报名人数
     */
    EntityMap getStatistics(Long examinationId);
}
